home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power Programmierung
/
Power-Programmierung (Tewi)(1994).iso
/
qtawk
/
romn.exp
< prev
next >
Wrap
Text File
|
1990-04-23
|
2KB
|
96 lines
# QTAwk utility to convert integers from 1 to 50 to roman numerals
#
BEGIN {
for ( i = 10 ; i < 50 ; i += 1 ) {
rmn = roman_numeral(i);
alp = d_to_alpha(i);
print i " : " rmn " : " strupr(rmn) " : " alp " : " strupr(alp);
}
}
# function to convert decimal number to roman numeral
function roman_numeral(num) {
# pwr_ten ==> maximum integer representable as roman numeral
local i, pwr_ten = 10000;
local frst_sym = '?', secd_sym = 'm', thrd_sym = '?';
local num_str = "";
local three_sym;
num = int(num);
if ( num <= pwr_ten )
do {
pwr_ten /= 10;
i = num / pwr_ten;
num -= i * pwr_ten;
three_sym = "";
switch ( i ) {
case 3:
num_str ∩= secd_sym;
case 2:
num_str ∩= secd_sym;
case 1:
num_str ∩= secd_sym;
break;
case 4:
num_str ∩= secd_sym;
num_str ∩= thrd_sym;
break;
case 5:
num_str ∩= thrd_sym;
break;
case 8:
three_sym ∩= secd_sym;
case 7:
three_sym ∩= secd_sym;
case 6:
three_sym ∩= secd_sym;
num_str ∩= thrd_sym three_sym;
break;
case 9:
num_str ∩= secd_sym;
num_str ∩= frst_sym;
break;
case 0:
break;
}
switch ( frst_sym = secd_sym ) {
case 'm':
secd_sym = 'c';
thrd_sym = 'd';
break;
case 'c':
secd_sym = 'x';
thrd_sym = 'l';
break;
case 'x':
secd_sym = 'i';
thrd_sym = 'v';
break;
}
} while ( pwr_ten && num );
return num_str;
}
# convert decimal number to alphabetic number - useful if alphabetic page
# numbering wanted
function d_to_alpha(num) {
local num_str = "";
local k;
local alphabet = "abcdefghijklmnopqrstuvwxyz ";
num = int(num);
if ( num > 0 && num <= 308915776 ) { # test for maximum number convertable
while ( num > 26 ) {
k = num % 26;
num /= 26;
if ( !k ) {
k = 26;
num--;
}
num_str = substr(alphabet,k,1) num_str;
}
num_str = substr(alphabet,num,1) num_str;
}
return num_str;
}